package com.dance.netty.netty.heartbeat;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.timeout.IdleStateEvent;

public class NettyServerIdleStateHandler extends ChannelInboundHandlerAdapter {

    /**
     * 用户事件触发器
     *
     * @param ctx 上下文
     * @param evt 事件
     * @throws Exception 异常
     */
    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
        // 如果属于空闲事件
        if (evt instanceof IdleStateEvent) {
            IdleStateEvent idleStateEvent = (IdleStateEvent) evt;
            String msg = "";
            switch (idleStateEvent.state()) {
                // 读空闲事件
                case READER_IDLE:
                    msg = "读空闲";
                    break;
                // 写空闲事件
                case WRITER_IDLE:
                    msg = "写空闲";
                    break;
                // 读写空闲事件
                case ALL_IDLE:
                    msg = "读写空闲";
                    break;
                default:
                    msg = "没有对应的事件";
            }
            System.out.println(ctx.channel().remoteAddress() + "--超时事件--" + msg);
        }
    }
}
